using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Logical.Comercial;
using Marlimer.Logical.Universal;
using Marlimer.Common;
using Marlimer.Common.EntidadesGrilla;

namespace Marlimer.Logistico.Procesos
{
    public partial class frm_DevolucionDocumentos : Form
    {

        lcom_MotivoAnulacion lcom_motivoanulacion = new lcom_MotivoAnulacion();
        lcom_Transportista lcom_transportista = new lcom_Transportista();
        lcom_DocumentoCab lcom_documentocab = new lcom_DocumentoCab(); 

        luni_TipoDocVta luni_tipodocvta = new luni_TipoDocVta();
        List<itemsGrilla> itemsGrid = new List<itemsGrilla>(); 

        public frm_DevolucionDocumentos()
        {
            InitializeComponent();
        }

        private void frm_DevolucionDocumentos_Load(object sender, EventArgs e)
        {
            itemsGrid.Add(new itemsGrilla("ccod_doc", "", 0, false, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("ctip_docvta", "", 50, false, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("cabre_docvta", "Tip.Doc.", 50, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("cnum_serie", "Serie", 40, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cnum_docvta", "Num Doc.", 60, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("ccod_cli", "Cliente", 50, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("craz_soc", "Razon Social", 200, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("ntot_neto", "Total", 90, true, true, DataGridViewContentAlignment.MiddleRight, "F"));

            dtpFecEnt.Value = System.DateTime.Today;
   
            CargarCombos();

            //posicion inicial
            this.Location = new Point(0, 0);

            ConfigurarRejilla();
        }

        private void ConfigurarRejilla()
        {
            gridResultados.Columns.Clear();
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Tip.Doc.", 50, true, true, DataGridViewContentAlignment.MiddleRight));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Serie", 40, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Num Doc.", 60, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Cliente", 50, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Razon Social", 200, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Total", 90, true, true, DataGridViewContentAlignment.MiddleCenter));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Motivo Anulacion", 200, true, true, DataGridViewContentAlignment.MiddleCenter));

            //gridResultados.AllowUserToResizeColumns = false;
            gridResultados.AllowUserToResizeRows = false;
            gridResultados.RowHeadersVisible = false;
            gridResultados.AllowUserToAddRows = false;
            gridResultados.AllowUserToDeleteRows = false;  
            gridResultados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }


        private void CargarCombos()
        {
            Util.LlenarDataCombo(lcom_transportista.getDTTransportista(), cboTransportista, true);
            Util.LlenarDataCombo(luni_tipodocvta.getDTTipoDocvta(), cboTipoDocVta, true);
        }

        private void nuevaBusqueda()
        {
            CargarCombos();
            gridResultados.DataSource = null;
            ConfigurarRejilla();
            btnBuscar.Enabled = true;
            btnDevolver.Enabled = false; 
        }


        private void cboGeneral_KeyPress(object sender, KeyPressEventArgs e)
        {
            Util.validaEnter(e.KeyChar);
        }

        private void txtGeneral_Leave(object sender, EventArgs e)
        {
            TextBox txt = (TextBox)sender;
            String value = "";
            int valuenum = -1;
            String nametxt = txt.Name;
            object newval = null;

            if (txt.Text.Trim() != "")
            {
                value = txt.Text;
                valuenum = Convert.ToInt32(Util.ToValor(txt.Text));
            }

            switch (nametxt)
            {
                case "txtCodTransportista":
                    {
                        cboTransportista.SelectedValue = valuenum;
                        newval = cboTransportista.SelectedValue;
                        break;
                    }
            }
            txt.Text = Convert.ToString(newval);
        }

        private void cboGeneralDT_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cbo = (ComboBox)sender;
            String valor = "";
            String namecbo = cbo.Name;
            //validamos que el indice seleccionado sea mayor a -1
            if (cbo.SelectedIndex > -1 && cbo.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                valor = Convert.ToString(cbo.SelectedValue);
            }

            switch (namecbo)
            {
                case "cboTransportista":
                    {
                        txtCodTransportista.Text = valor;
                        break;
                    }
            }
        }

        private void txtGeneralSelect_Enter(object sender, EventArgs e)
        {
            Util.selectAllText(((TextBox)sender));
        }

        private void txtGeneralEntero_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = Util.validaTecla(e.KeyChar, "Entero", ((TextBox)sender).Text, true);
        }

        private void btnNuevaBusqueda_Click(object sender, EventArgs e)
        {
            nuevaBusqueda();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            DataTable dtresul = lcom_documentocab.MostrarDocumentosToAnular(dtpFecEnt.Value, Convert.ToInt32(cboTransportista.SelectedValue), Convert.ToInt32(cboTipoDocVta.SelectedValue));

            gridResultados.DataSource = null;
            ConfigurarRejilla();

            if (dtresul.Rows.Count > 0)
            {
                gridResultados.Columns.Clear();
                //recorrer el datagrid
                gridResultados.DataSource = dtresul;
                Util.setRejillaColumns(gridResultados, itemsGrid);
                //agregar las columnas adicionales.
                DataGridViewComboBoxColumn colMotAnul = new DataGridViewComboBoxColumn();
                colMotAnul.Name = "ccod_motanul";
                colMotAnul.HeaderText = "Motivo Anulacion";
                colMotAnul.Width = 200;
                //cargamos el combo con los motivos que representan devolucion 
                DataTable dt = lcom_motivoanulacion.getDTMotivoAnulacion(1);
                colMotAnul.DataSource = dt;
                colMotAnul.ValueMember = dt.Columns[0].ColumnName;
                colMotAnul.DisplayMember = dt.Columns[1].ColumnName;
                colMotAnul.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
                

                gridResultados.Columns.Add(colMotAnul);
                lblResultados.Text = "Registros encontrados: " + dtresul.Rows.Count.ToString();
                btnDevolver.Enabled = true;
                btnBuscar.Enabled = false; 
            }
            else
            {
                //no se encontraron resultados.
                lblResultados.Text = "No se encontraron resultados.";
                btnDevolver.Enabled = false;
            }
        }

        private void btnDevolver_Click(object sender, EventArgs e)
        {
            //recorrer la grilla e ir tomando el valor del data combo cuando haya

            int ccod_motanul;
            int ctip_docvta;
            long ccod_doc;
            Boolean entro=false;
            List<InfoDocumentoAnular> docsanuls = new List<InfoDocumentoAnular>();
   
            for (int i = 0; i < gridResultados.Rows.Count; i++)
            {
                if (gridResultados.Columns["ccod_motanul"] != null)
                {
                    //tomamos los valores de las columnas
                    ccod_motanul = Convert.ToInt32(gridResultados.Rows[i].Cells["ccod_motanul"].Value);
                    ccod_doc = Convert.ToInt64(gridResultados.Rows[i].Cells["ccod_doc"].Value);
                    ctip_docvta = Convert.ToInt32(gridResultados.Rows[i].Cells["ctip_docvta"].Value);
 
                    if (ccod_motanul != 0)
                    {
                        InfoDocumentoAnular docanul = new InfoDocumentoAnular();
                        docanul.ccod_doc = ccod_doc;
                        docanul.ccod_motanul = ccod_motanul;
                        docanul.ctip_docvta = ctip_docvta;  
                        docsanuls.Add(docanul);
                        entro = true;
                    }
                }
            }

            //si entro quiere decir que hay que mostrar el resultado
            if (entro)
            {
                //se pregunta si realmente se desea guardar
                if (MessageBox.Show("Seguro que desea generar la devolucion de documentos?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    resulMsgError resul = lcom_documentocab.anularDocumento(docsanuls);
                    if (resul.resul)
                    {
                        MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        nuevaBusqueda();
                    }
                    else
                    {
                        MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }

        private void gridResultados_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        { 
            ComboBox cbo = (ComboBox)e.Control;
            cbo.KeyDown += new KeyEventHandler(validarCombo_KeyDown);
        }

        private void validarCombo_KeyDown(object sender, KeyEventArgs e)
        {
            //si se presiona del/supr o backspace
            if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back)
            {
                //limpiar el combo
                ComboBox cbo = (ComboBox)sender;
                cbo.SelectedIndex = -1;
            }
        }

    }
}